﻿#define _CRT_SECURE_NO_WARNINGS 1
// 原题连接：https://www.nowcoder.com/practice/16d971e9e42e4f3b9b1e2b8794796a43?tpId=308&tqId=40488&ru=/exam/oj

/*
题目描述：
描述
给定
n
n个活动，每个活动安排的时间为
[
a
i
,
b
i
)
[a
i
​
 ,b
i
​
 )。求最多可以选择多少个活动，满足选择的活动时间两两之间没有重合。
输入描述：
第一行输入一个整数
n
n (
1
≤
n
≤
2
⋅
1
0
5
1≤n≤2⋅10
5
 )，表示可选活动个数。
接下来的
n
n行，每行输入两个整数
a
i
,
b
i
a
i
​
 ,b
i
​
  (
0
≤
a
i
<
b
i
≤
1
0
9
0≤a
i
​
 <b
i
​
 ≤10
9
 )，表示第
i
i个活动的时间。
输出描述：
输出一行一个整数，表示最多可选择的活动数。
示例1
输入：
3
1 4
1 3
3 5
复制
输出：
2

*/
// 开始解题：
// 方法——排序 + 贪心
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
int n = 0;
pair<int, int> nums[N];

int main() {
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d%d", &nums[i].first, &nums[i].second);
    }
    // 按照左端点排序
    sort(nums, nums + n);
    int ret = 0;
    int right = nums[0].second; // 记录当前最小的左端点
    for (int i = 1; i < n; i++) {
        if (nums[i].first < right) {
            // 有重合，更新right
            right = min(right, nums[i].second);
        }
        else {
            // 没有重合
            ret++;
            // 让当前的左端点成为新的最小左端点
            right = nums[i].second;
        }
    }
    ret++; // 加上最后一个区间
    printf("%d\n", ret);
    return 0;
}